home *** CD-ROM | disk | FTP | other *** search
/ Utilities Professional 1-1500 / Utilities Professional 1-1500 (1994)(WPD)[!].iso / 12511500 / var1308.dms / var1308.adf / DNET2_10.LHA / DNet / Amiga / Sourcen.lha / dnet / dnet.h < prev    next >
C/C++ Source or Header  |  1993-01-14  |  11KB  |  355 lines

  1.  
  2. /*
  3.  *  DNET.H
  4.  *
  5.  *  DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved.
  6.  *
  7.  */
  8.  
  9. #include <exec/types.h>
  10. #include <exec/tasks.h>
  11. #include <exec/memory.h>
  12. #include <devices/serial.h>
  13. #include <devices/timer.h>
  14. #include <libraries/dos.h>
  15. #include <libraries/dosextens.h>
  16. #include <intuition/intuition.h>
  17. #include <proto/all.h>
  18.  
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <string.h>
  22. #include "/version.h"
  23.  
  24. #define DNET_H
  25.  
  26. #define DMNWOFF     4        /*    Deemu offset to NewWindow structure */
  27.  
  28. #define ARGS(foo)   foo
  29.  
  30. typedef struct IORequest    IOR;
  31. typedef struct IOStdReq     IOSTD;
  32. typedef struct IOExtSer     IOSER;
  33. typedef struct IOStdReq     IOCON;
  34. typedef struct timerequest  IOT;
  35. typedef struct Window        WIN;
  36. typedef struct NewWindow    NW;
  37. typedef struct RastPort     RP;
  38. typedef struct Task        TASK;
  39. typedef struct Process        PROC;
  40. typedef struct MsgPort        PORT;
  41. typedef struct Node        NODE;
  42. typedef struct MinNode        MNODE;
  43. typedef struct List        LIST;
  44. typedef struct MinList        MLIST;
  45. typedef struct Message        MSG;
  46.  
  47. typedef unsigned char    ubyte;
  48. typedef unsigned short    uword;
  49. typedef unsigned long    ulong;
  50.  
  51. #include "/dnet/channel.h"
  52.  
  53. #ifndef MAX(a,b)
  54. #define MAX(a,b) (((a)>(b))?(a):(b))
  55. #endif
  56.  
  57. #define CFGFILE "s:dnet.config"
  58.  
  59. #define PKT    struct _PKT
  60. #define CTLPKT    struct _CTLPKT
  61. #define PNODE    struct _PNODE
  62. #define IOMSG    struct _IOMSG
  63.  
  64. #define DNETPORTNAME        "DNET.UNIT."
  65. #define OFFSET(ptr,elem)    ((long)((char *)&(ptr)->elem - (char *)(ptr)))
  66.  
  67. #define EMPTY    0    /*  empty (sent)                    */
  68. #define READY    1    /*  data ready (not sent yet)       */
  69.  
  70. #define MAXCHAN 128    /*  Max # of channels supported     */
  71. #define SYNC    0x5B    /*  SYNC character            */
  72. #define MAXPKT    200    /*  maximum packet size         */
  73. #define MINPKT    32    /*  minimum maximum packet size
  74.                 (for priority scheme)           */
  75.  
  76. #define MAXPACKET ((MAXPKT * 8 + 5) / 6 + 64)
  77.  
  78. #define OVERHEAD    7    /*  for packets with data        */
  79.  
  80. PNODE {
  81.     NODE    node;
  82.     char    name[32];
  83.     ulong   seg;
  84. };
  85.  
  86. CTLPKT {
  87.     uword   buflen;    /*  send: length of packet, recv: length of data    */
  88.     ubyte   state;    /*  EMPTY, READY                    */
  89.  
  90.     ubyte   sync;    /*  THE PACKET        */
  91.     ubyte   ctl;
  92.     ubyte   cchk;
  93. };
  94.  
  95. PKT {
  96.     uword   buflen;    /*  send: length of packet, recv: length of data    */
  97.     ubyte   state;    /*  EMPTY, READY                    */
  98.  
  99.     ubyte   sync;    /*  THE PACKET        */
  100.     ubyte   ctl;
  101.     ubyte   cchk;
  102.     ubyte   lenh;
  103.     ubyte   lenl;
  104.     ubyte   dchkh;
  105.     ubyte   dchkl;
  106.     ubyte   data[MAXPACKET];
  107. };
  108.  
  109. /*
  110.  *  Used by the IoCtl() support routines.
  111.  */
  112.  
  113. IOMSG {
  114.     MSG     Msg;
  115.     TASK    *ReplyTask;
  116.     ulong   Cmd;
  117.     ulong   Arg1;
  118.     ulong   Arg2;
  119.     ulong   Res;
  120. };
  121.  
  122. #ifdef NOTDEF
  123.             /*  RECEIVER STATES            */
  124. #define RS_SYNC 0        /*    Waiting for sync        */
  125. #define RS_CTL    1        /*    Waiting for command        */
  126. #define RS_CCHK 2        /*    Waiting for check byte        */
  127. #define RS_LEN1 3        /*    Waiting for MSB length byte    */
  128. #define RS_LEN2 4        /*    Waiting for LSB length byte    */
  129. #define RS_DATA 5        /*    Waiting for data & checksum    */
  130.  
  131. #endif
  132.  
  133. #define DNCMD_OPEN    32  /*    Application open        */
  134. #define DNCMD_SOPEN    33  /*    Server open            */
  135. #define DNCMD_CLOSE    34  /*    Close a channel         */
  136. #define DNCMD_EOF    35  /*    Will no longer write to channel */
  137.  
  138. #define DNCMD_WRITE    36  /*    Write data to a channel     */
  139. #define DNCMD_QUIT    37  /*    Kill the DNET server        */
  140. #define DNCMD_IOCTL    38
  141. #define DNCMD_EXEC    39  /*    server asks driver to Execute() something */
  142.  
  143. #define DNCMD_INFO    64  /*    Ascii status message        */
  144.  
  145.                 /*  REQUEST TYPES        */
  146. #define RTO_REQ     1   /*    Network read timeout        */
  147. #define WTO_REQ     2   /*    Network write-ack timeout    */
  148. #define RNET_REQ    3   /*    Network read data        */
  149. #define WNET_REQ    4   /*    Network write data sent     */
  150. #define PKT_REQ     5   /*    Returned packets from servers    */
  151. #define OPEN_REQ    6
  152. #define IGWNET_REQ    7
  153. #define CTO_REQ     8
  154. #define CNET_REQ    9
  155.  
  156.                     /*    PACKET CONTROL BYTE */
  157. #define PKF_SEQUENCE    0x07    /*  Sequence #            */
  158. #define PKF_MASK    0x78    /*  command mask        */
  159.  
  160. #define PKCMD_RESTART    0x20    /*  Restart            */
  161. #define PKCMD_ACKRSTART 0x28    /*  Restart Acknowledge     */
  162. #define PKCMD_WRITE6    0x30    /*  A DATA packet 6 bit enc    */
  163. #define PKCMD_WRITE    0x38    /*  A DATA packet        */
  164. #define PKCMD_CHECK    0x40    /*  Request ACK or NAK for win    */
  165. #define PKCMD_ACK    0x48    /*  ACK a window        */
  166. #define PKCMD_NAK    0x50    /*  NAK a window        */
  167. #define PKCMD_WRITE7    0x58    /*  compressed 7 bit in 8 bit pkt */
  168.                 /*  0x60-0x7F reserved        */
  169.  
  170.                     /*    CHANNEL COMMANDS    */
  171. #define SCMD_SWITCH    0x00    /*  switch active channel #    */
  172. #define SCMD_OPEN    0x01    /*  open a channel        */
  173. #define SCMD_CLOSE    0x02    /*  close a channel        */
  174. #define SCMD_ACKCMD    0x03    /*  ack an open/close request    */
  175. #define SCMD_EOFCMD    0x04    /*  Reof or Weof        */
  176. #define SCMD_QUIT    0x05    /*  crash dnet            */
  177. #define SCMD_IOCTL    0x06    /*  ioctl            */
  178.  
  179. #define SCMD_DATA    0x08    /*  stream command, DATA    */
  180.  
  181. #define CHAN_FREE    0x01    /*  free channel        */
  182. #define CHAN_ROPEN    0x02    /*  remote open, wait port msg    */
  183. #define CHAN_LOPEN    0x03    /*  local open, wait reply    */
  184. #define CHAN_OPEN    0x04
  185. #define CHAN_CLOSE    0x05    /*  see flags            */
  186. #define CHANF_ROK    0x01    /*  NOT read eof        */
  187. #define CHANF_WOK    0x02    /*  remote will accept data    */
  188. #define CHANF_LCLOSE    0x04
  189. #define CHANF_RCLOSE    0x08
  190.  
  191. extern void  *ArbitrateNext();
  192. extern long  IoHandler();
  193.  
  194. #ifndef NOEXT
  195. extern IOT Rto;            /*  Read-Timeout/reset           */
  196. extern IOT Wto;            /*  Write-Timeout/retry           */
  197. extern IOT Cto;
  198. extern PKT Pkts[9];
  199. extern PKT *Raux;           /*  next packet in           */
  200. extern PKT *RPak[4];
  201. extern PKT *WPak[4];
  202. extern PORT *DNetPort;           /*  Remote Command/Control in    */
  203. extern PORT *IOSink;           /*  Return port for ALL IO    */
  204. #ifdef NOTDEF
  205. extern PORT *IPCPort;           /*  IPC comm port        */
  206. #endif
  207. extern CHAN Chan[MAXCHAN];
  208. extern LIST TxList;           /*  For pending DNCMD_WRITE reqs.   */
  209. extern ubyte Rto_act;
  210. extern ubyte Wto_act;
  211. extern ubyte Cto_act;
  212. extern ubyte Cd;
  213. extern uword RChan;
  214. extern uword WChan;
  215. extern uword RPStart;
  216. extern uword WPStart;
  217. extern uword WPUsed;
  218. extern uword RState;
  219. extern uword Protocol;
  220. extern short DDebug;
  221. extern short PDebug;
  222. extern ubyte Restart;
  223. extern ubyte OnLine;
  224. extern ubyte Quit;
  225. extern ubyte Mode7;        /* 7 bit line    */
  226. extern short AutoHangup;
  227. extern short DialOut;
  228. extern short AutoAnswer;
  229. extern short Master8;
  230. extern short NetworkNum;
  231. extern short Getty;
  232. extern ulong NumCon;
  233. extern ulong WTimeoutVal;
  234. extern ulong RTimeoutVal;
  235. extern long Baud;
  236. extern long TOBaud;
  237. extern char *HostName;        /*    The Amiga's HostName    */
  238. extern long DResBase;
  239. extern char PortName[];
  240.  
  241. extern short Deemu[];
  242.  
  243. extern long    BytesOut, PacketsOut, PacketsResent;
  244. extern long    BytesIn , PacketsIn , PacketsNakd;
  245. extern long    GarbageIn;
  246.  
  247. extern long    Packets6In, Packets7In, Packets8In;
  248. extern long    Packets6Out, Packets7Out, Packets8Out;
  249.  
  250.  
  251. #ifdef NOTDEF
  252.  
  253. extern void do_rto    ARGS((IOT *));
  254. extern void do_wto    ARGS((IOT *));
  255. extern void do_rnet    ARGS((ubyte *, long));
  256. extern void do_wnet    ARGS((void));
  257. extern void do_wupdate    ARGS((void));
  258. extern void dumpcheck    ARGS((ubyte *));
  259. extern void do_cmd    ARGS((uword, ubyte *, int));
  260. extern void do_rupdate    ARGS((void));
  261. extern void do_reccmd    ARGS((int, ubyte *, int));
  262. extern void replywindow ARGS((int));
  263.  
  264. /* Prototypes for functions defined in sernet.c */
  265.  
  266. extern void NetOpen    ARGS((PORT *, char *, int, int *));
  267. extern void NetClose    ARGS((void));
  268. extern void NetClWrite    ARGS((IOSER *));
  269. extern void NetWrite    ARGS((void *, int, int));
  270. extern void NetBreak    ARGS((void));
  271. extern int  NetReady    ARGS((void));
  272. extern int  SetBaudRate ARGS((int));
  273. extern void DropDTR    ARGS((void));
  274. extern void NetStartRead ARGS((long));
  275. extern IOSER *NetAbortRead ARGS((void));
  276. extern struct IOExtSer *NetReadReady ARGS((void));
  277. extern int  NetReadReturned ARGS((int, ubyte **));
  278. extern void NetWaitWrite ARGS((void));
  279. extern void SaveState ARGS((void));
  280. extern void RestoreState ARGS((void));
  281. extern void NetRecvOff ARGS((void));
  282. extern void NetRecvOn ARGS((void));
  283. extern void NetSerialOff ARGS((void));
  284. extern void NetSerialOn ARGS((void));
  285.  
  286.  
  287. /* Prototypes for functions defined in time.c */
  288.  
  289. extern void do_cto        ARGS((IOT *));
  290. extern void ResetIdle        ARGS((void));
  291. extern void ResetConnect    ARGS((void));
  292. extern void LessConnect     ARGS((int));
  293. extern void SetConnectAlert ARGS((int, char *));
  294. extern void SetIdleAlert    ARGS((int, char *));
  295. extern int  GetIdle        ARGS((void));
  296. extern int  GetConnect        ARGS((void));
  297. /*
  298. extern int  doipcmsg        ARGS((char *, char *, short));
  299. */
  300.  
  301. /* Prototypes for functions defined in dnet.c */
  302.  
  303. void do_netreset ARGS((void));
  304.  
  305. /* Prototypes for functions defined in ipc.c */
  306.  
  307. /*
  308. extern int  handle_ipc        ARGS((void));
  309. extern void  do_online        ARGS((void));
  310. extern void  do_offline     ARGS((void));
  311. extern void  do_disconnect  ARGS((void));
  312. extern void  do_quit        ARGS((void));
  313. extern void  do_stat        ARGS((int, char **, int *));
  314. extern void  do_state        ARGS((void));
  315. extern int   AllocAppend    ARGS((char **, int *, char *, int));
  316. extern void  do_recvon        ARGS((void));
  317. extern void  do_recvoff     ARGS((void));
  318. extern void  do_serialon    ARGS((void));
  319. extern void  do_serialoff   ARGS((void));
  320. extern void  do_baud        ARGS((char **));
  321. extern void  do_getidle     ARGS((char **, char **, int *));
  322. extern void  do_getconnect  ARGS((char **, char **, int *));
  323. */
  324.  
  325. /* Prototypes for functions defined in subs.c */
  326.  
  327. extern void WriteStream     ARGS((int, void *, int, uword));
  328. extern void WritePort        ARGS((PORT *, int, void *, int, int, int));
  329. extern int  alloc_channel   ARGS((void));
  330. extern int  GetNext    ARGS((struct Node *));
  331. extern int  chkbuf    ARGS((ubyte *, uword));
  332. extern void TimerOpen    ARGS((struct timerequest *, struct MsgPort *));
  333. extern void TimerClose    ARGS((struct timerequest *));
  334. extern void InitServers ARGS((void));
  335. extern void RunServer    ARGS((uword));
  336. extern void DeleteServers ARGS((void));
  337. extern void dneterror    ARGS((char *));
  338. extern void fixsignal    ARGS((PORT *));
  339. extern void SetTimeouts ARGS((int));
  340.  
  341. /* Prototypes for functions defined in window.c */
  342.  
  343. extern void  do_dnetwindow ARGS((int));
  344. extern void  setparity ARGS((int,int,int));
  345. extern void  addparity ARGS((ubyte *, int));
  346. extern void  OpenConsole ARGS((WIN *, IOCON **, IOCON **));
  347. extern void  CloseConsole ARGS((IOCON *, IOCON *));
  348. extern void  InitDeemuNW ARGS((short *, NW *));
  349. extern void  LoadConnectList ARGS((void));
  350. extern void  UnLoadConnectList ARGS((void));
  351. extern int   CheckConnect ARGS((int, char *, int));
  352.  
  353. #endif
  354. #endif
  355.